React Native开篇

React Native(之后简写为RN)火了一段时间了,但是当我跟身边的小伙伴提起的时候,好像知道的人并不多,是身边的伙伴Out了吗?其实,这还是得看是否有机会让你去研究的。可能你听了 RN 后根本不在意,也可能你想去了解下他,但是工作很忙,后来也就渐渐念头消失了。当然,如果你是技术宅(Me too)那可能怎样你都能抽出时间去学习。我算幸运了,公司领导是个对新技术有热情的人,所以,公司决定用 RN 重构整个项目。原因有两个:1. 将iOS和Android统一开发,为之后节省大量时间;2. 无需Apple审核,实现动态更新。

正文

今天,将对自己这段时间所学,做个总结,当然,也希望读者能从中学到点什么。在学习的过程中,如果遇到什么问题,希望我们也能相互交流。

下面,我将围绕这几个问题说明:

  1. 学习 RN 有用吗?
  2. 学习 RN 前需要准备什么?
  3. 遇到问题怎么办? …

我们先不说未来 RN 是否会家喻户晓,我们先了解下他在试图解决什么问题。官方网站有句话:Learn Once, Write Anywhere。学习一种编程语言,实现所有平台的功能(从目前看,这门语言非 Javascript 莫属了)。Facebook表面上是说让Javascript可以实现多平台,其实从另一个层面上说,他在试图解决代码重复编写的问题。意思就是:你没有办法让 1 + 1 = 1, 但是可以实现 1 + 1 <<< 2(远小于2)。 这样说吧,假设你会 iOS 开发,又会 Android 开发,现在让你开发一个 App,你需要写 1 + 1 = 2 这么多的代码,即使你的 Model,你的 View 封装的再好,由于所用的编程语言不同,语法就更不用说了,所以你还是得改改改,然后才能转到另外一个平台去(一般情况下不会这样做的,都是Android和iOS分开开发的)。那现在如果能让 1 + 1 <<< 2 的话,你做不做?你学不学?另外,不管如何,这种思想是正确的,谁不想花少时间开发出同样的产品呢。

那些只是听过 RN 的人总会误以为 RN 所用的控件都是通过类似 H5 搭建App那样全部基于 web 来实现的,当我像他们提起说公司现在用 RN 重新搭建项目时,他们就会问:那 Native 的控件都不用了吗?性能会不会很差呀? 其实,不是的,从名字上就可以看出,RN用的是 Native 的控件。RN 上的控件(又叫组件)是通过 Native 上的控件进行封装的,所以我们用的还是 Native 的控件。但是现在 RN 还是有不少问题的,比如使用的 TableView(ListView) 就没法像 Native 那么高性能了,但是问题总有解决的一天。

那学习 RN 之前,我们需要什么技能储备呢?前面说了,RN 所使用的编程语言是 Javascript(使用的是jsx)语法,所以

  1. 有点 Javascript的基础是必须的,至少你得知道怎样定义一个变量,怎样定义一个函数(方法),然后稍微理解一下闭包(我就是只懂这些就开始的),闭包的概念现在在很多语言上都有了,Objective-C,swift,Java 等都引入了;
  2. 既然是开发 App,当然某一个平台的编程语言你是必须熟悉的。如果你已经是 iOS 或者 Android 开发者那就不用说了;
  3. flex-box 的布局方式你得先了解下,这对你的开发适配有很大的帮助。

下面说说我是怎样准备这些的:

  1. Javascript可以说我基本上都是不懂的,之前想学,但是都没机会。只知道var来定义变量,通过看其他源码例子,不懂就查(如数组元素怎样拼接成字符串,字符串怎样分割成数组这些很基本的函数调用,方法名其实跟其他语言的都基本一样),现在写出某个功能已经基本上没问题了,遇到不懂的语法就查下;
  2. 因为我是做iOS开发的,所以对Objective-C还是有信心的(这样决定了我后面写的一些实现都只涉及到iOS,当然,很多都是和Android通用的);
  3. 我是这样学 flex-box 的,先看一遍这篇文章:一个完整的Flexbox指南或这篇Flex布局教程:语法篇了解了它大概能怎样进行布局,然后这篇文章我就没再关掉过了(至少到现在都没关掉这个网页),还是那句话,不记得的时候就看一下,渐渐的就熟悉了。就这样我开始了 RN 开发项目之旅。

最后一个问题,遇到问题怎么办? 现在我知道的是国内有几个中文社区,如React-China, React Native中文社区。国外资料的话,首先 Facebook 的官方文档已经有很详细的使用说明了。但是我们遇到其他各式各样的问题,如果遇到不懂的语法直接 google基本上就够了,而如果发现了 RN 的 bug 之类的,我们可以直接去 RN 的 github 上去查 issue,没准其他人也已经发现了,如果实在没有,那就只能自己发 issue 了。另外,RN 现在更新很快,基本上两三个星期就有个新的版本了,所以,今天发现的 bug 可能明天就被修复了。